修飾語,可與其他修飾語合用,可用在 class 的內部類、屬性、方法中,不需建立物件就可以直接存取,其記憶體位置是在global區。
靜態的意思是JVM載入程式後,跟著程式一起在記憶體中佔有空間,而不是主程式開始執行後才跟記憶體要空間。
[存取權限] static 資料類型 變數名稱(=初始化);
[存取權限] static 返回類型 方法名稱([參數列]){
程式區塊;
}
public class StaticDemo {
public static String name = "小明";
String enName = "Jack";
public static void main(String[] args) {
StaticDemo s1 = new StaticDemo();
StaticDemo s2 = new StaticDemo();
System.out.println("1:" + s1.name);
System.out.println("2:" + StaticDemo.name);
s1.name = "阿傑";
System.out.println("3:" + s2.name);
System.out.println("4:" + StaticDemo.name);
}
}
/*
結果:
1:小明
2:小明
3:阿傑
4:阿傑
*/
上面那段程式碼明顯的透露出:
值只會在記憶體中保存一份,因此只要有修改,不管使用哪一種語法讀取值都會相同。
記憶體配置:
public class StaticDemo {
public static String name = "小明";
String enName = "Jack";
public static void show() {
System.out.println(name);
System.out.println(enName);//會報錯,
}
public void show2() {
System.out.println(name);
System.out.println(enName);
}
public static void main(String[] args) {
StaticDemo s1 = new StaticDemo();
StaticDemo s2 = new StaticDemo();
System.out.println("1:" + s1.name);
System.out.println("2:" + StaticDemo.name);
s1.name = "阿傑";
System.out.println("3:" + s2.name);
System.out.println("4:" + StaticDemo.name);
}
}
static成員只允許存取 static成員。
public static void show() {
System.out.println(name);
System.out.println(enName);//會報錯,
}
非static成員 可直接存取static成員與非static成員。
public void show2() {
System.out.println(name);
System.out.println(enName);
}
static 類別屬性的初始化有二種:
注意:必須放在類別內, 不屬於任何方法, 會在類別變數配置後自動開始執行。
static {
程式區塊;
}
小結:比較有static跟沒有static的差異,一個決定性的不同是載入記憶體的時機。
因為一開始就存在於記憶體之中,所以稱為靜態(static)。
今天就介紹了static 明天就會是封裝的最後一篇囉~